import entity.MFD;
import entity.UFD;
import util.Init_MFD;

import java.io.*;
import java.util.Scanner;

//第四题 模拟文件管理的工作过程 主函数入口
public class File_operation_system {
    public static Scanner input;
    public static String address;
    public static File file;
    public static File[] filelist;
    public static int savenum = 0;
    public static int savemax = 10;
    public static String fileName;
    public static int opennum = 0;

    public static void main(String[] args) {
        input = new Scanner(System.in);
        while (true) {
            System.out.print(">>>请输入用户名：");
            String username = input.nextLine();
            System.out.print(">>>请输入密码：");
            String password = input.nextLine();
            MFD mfd = Init_MFD.login(username, password);
            if (mfd == null) {
                System.out.println("请重新输入");
            } else {
                address = mfd.getAddress();
                file = new File(address);
                filelist = file.listFiles();
                while (true) {
                    displayChoose();
                    int choose = input.nextInt();
                    switch (choose) {
                        case 1:
                            creat();
                            break;
                        case 2:
                            read();
                            break;

                        case 3:
                            write();
                            break;
                        case 4:
                            delete();
                            break;

                        case 5://查看文件目录，当前用户的文件目录
                            dic();
                            break;
                        case 6:
                            System.out.println("退出成功");
                            System.exit(0);
                        default:
                            System.out.println("输入指令异常，请重新输入！");
                            break;

                    }
                }
            }
        }


    }

    public static void write() {
        System.out.println("操作目录 :" + address);
        System.out.println("输入你要写入的文件名字（包括文件后缀名）：");
        fileName = input.next();
        File f3 = new File(address + "/" + fileName);
        System.out.println("选择写入方式：add(追加)  cover(覆盖)");
        String how = input.next();
        System.out.println("输入你要写入的文本内容:");
        input.nextLine();
        String str1 = input.nextLine();

        FileWriter wrs = null;
        try {
            if (how.equals("add")) {
                wrs = new FileWriter(f3, true);
            } else {
                wrs = new FileWriter(f3);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        BufferedWriter buffer3 = new BufferedWriter(wrs);
        try {
            buffer3.write(str1);
            buffer3.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("操作完毕，返回" + "\n");
    }

    public static void delete() {
        System.out.println("输入你要删除的文件名字（包括文件后缀名）：");
        fileName = input.next();
        File f4 = new File(address + "/" + fileName);
        if (f4.isFile()) {
            if (f4.exists()) {
                f4.delete();
                System.out.println("文件删除成功");
            }
        } else {

            System.out.println("文件不存在，删除失败");
        }
    }

    public static void read() {
        System.out.println("操作目录 :" + address);
        System.out.println("输入你要读取的文件名字（包括文件后缀名）：");
        fileName = input.next();
        int mss = 0;
        String[] filename=file.list();
        for (String f : filename) {
            if (f != null && f.equals(fileName)) {
                mss = 1;
            }
        }
        if (mss == 0) {
            System.out.println("不存在这样的文件");
        } else {
            File f2 = new File(address + "/" + fileName);
            String str;
            BufferedReader buffer = null;
            if (opennum < 5) {
                try {
                    FileReader ins = new FileReader(f2);
                    buffer = new BufferedReader(ins);
                    System.out.println("读取的文件内容是：");
                    try {
                        while (null != (str = buffer.readLine())) {
                            System.out.println(str);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    opennum++;
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                    System.out.println("文件不存在，读取失败");
                }
                try {
                    buffer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else {
                System.out.println("打开文件数已达到本次访问上限");
            }
        }
        System.out.println("操作完毕，返回" + "\n");
    }

    public static void dic() {
        System.out.println("操作用户目录 ：" + address);
        System.out.println("您的当前系统文件如下：" + "\n");

        //list()方法是返回某个目录下的所有文件和目录的文件名，返回的是String数组
        String[] files = file.list();
        //listFiles()方法是返回某个目录下所有文件和目录的绝对路径，返回的是File数组

        //创建用户UFDlist
        UFD[] UFDlist = new UFD[files.length];
        //封装UFD
        for (int i = 0; i < files.length; i++) {
            UFD ufd = new UFD();
            filelist = file.listFiles();
            ufd.setFilename(files[i]);
            ufd.setFilelength(filelist[i].length());
            int protect;
            if (filelist[i].canRead() && filelist[i].canWrite()) {
                protect = 1;//文件可读
            } else {
                protect = 0;//文件不可读
            }
            ufd.setProtectnumber(protect);
            UFDlist[i] = ufd;
        }

        for (int j = 0; j < UFDlist.length; j++) {

            System.out.println(UFDlist[j].toString() + "\t物理地址:" + address + "/" + UFDlist[j].getFilename());
        }

        System.out.println("操作完毕，返回" + "\n");
    }

    public static void displayChoose() {
        System.out.println("***************************");
        System.out.println("#      --1:创建文件--      *");
        System.out.println("#      --2:读取文件--      *");
        System.out.println("#      --3:写入文件--      *");
        System.out.println("#      --4:删除文件--      *");
        System.out.println("#      --5:查看目录--      *");
        System.out.println("#      --6:退出登录--      *");
//        System.out.println("#      --7:打开文件--      *");
//        System.out.println("#      --8:关闭文件--      *");
        System.out.println("***************************");
        System.out.println("请输入要进行的操作");
    }

    public static void creat() {
        System.out.println("操作目录 :" + address);
        System.out.println("输入你要创建的文件名字（包括文件后缀名）：");
        fileName = input.next();//要创建的文件的命名
        File f1 = new File(address + "/" + fileName);//f1是创建这个

        if (f1.exists()) {
            System.out.println("该文件已经存在，无法创建！");
        } else if (savenum >= savemax) {
            System.out.println("保存文件数已达到本次访问上限！");
        } else {
            try {
                f1.createNewFile();
                System.out.println("文件创建成功");
                savenum++;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.out.println("操作完毕，返回" + "\n");
    }
}
